const fs = require('fs');
const promisify = require('util').promisify;
// promise 化
const stat = promisify(fs.stat);
const readdir = promisify(fs.readdir);

module.exports = async function (req, res, filePath) {
  try {
    // await 必须在 async函数 的内部使用
    // stat(Promise)返回数据后 status可以获得resoleve的值
    // try catch可以捕获reject的异常
    // 需要高版本nodejs支持 或者安装polyfill插件
    const stats = await stat(filePath);
    if (stats.isFile()) {
      res.statusCode = 200;
      res.setHeader('Content-Type', 'text/plain');
      fs.createReadStream(filePath).pipe(res);
    } else if (stats.isDirectory()) {
      const files = await readdir(filePath);
      res.statusCode = 200;
      res.setHeader('Content-Type', 'text/plain');
      res.end(files.join(','));
    }
  } catch (ex) {
    console.error(ex);
    res.statusCode = 404;
    res.setHeader('Content-Type', 'text/plain');
    res.end(`${filePath} is not a directory or file \n\n ERROR: ${ex.code} \n\n -> ${ex.message}`);
    return;
  }
};
